﻿
using FB.Providers.EmployeeInfo;
using System;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace FB.Providers
{
    public abstract class AspNetEmployeeInfoProvider : ProviderBase
    {
        /*
        public abstract Company GetCompany(string COMCode);
        public abstract List<Company> GetAllCompanies();
        public abstract List<Company> FindCompanies(Expression<Func<Company, bool>> filter = null);
        public abstract Company CreateCompany(Company company);
        public abstract void UpdateCompany(Company company);
        public abstract void DeleteCompany(string COMCode);
        public abstract List<Company> FindCompanies(Expression<Func<Company, bool>> filter, Func<IQueryable<Company>, IOrderedQueryable<Company>> orderBy,
     int pageIndex, int pageSize, out int totalRecords);

        public abstract Department GetDepartment(string DEPTCode, string includeProperties = "");
        public abstract List<Department> GetAllDepartments();
        public abstract List<Department> FindDepartments(Expression<Func<Department, bool>> filter = null, string includeProperties = "");
        public abstract Department CreateDepartment(Department department);
        public abstract void UpdateDepartment(Department department);
        public abstract void DeleteDepartment(string DEPTCode);
        public abstract List<Department> FindDepartments(Expression<Func<Department, bool>> filter, Func<IQueryable<Department>, IOrderedQueryable<Department>> orderBy,
 int pageIndex, int pageSize, out int totalRecords);

        public abstract Position GetPosition(string POSCode);
        public abstract List<Position> GetAllPositions();
        public abstract List<Position> FindPositions(Expression<Func<Position, bool>> filter = null);
        public abstract Position CreatePosition(Position position);
        public abstract void UpdatePosition(Position position);
        public abstract void DeletePosition(string POSCode);
        public abstract List<Position> FindPositions(Expression<Func<Position, bool>> filter, Func<IQueryable<Position>, IOrderedQueryable<Position>> orderBy,
int pageIndex, int pageSize, out int totalRecords);

        public abstract string GenerateEMPCode(string EMPType);
        public abstract Employee GetEmployee(string EMPCode, string includeProperties = "");
        public abstract List<Employee> GetAllEmployees(string includeProperties = "");
        public abstract List<Employee> FindEmployees(Expression<Func<Employee, bool>> filter = null, string includeProperties = "");
        public abstract List<Employee> FindEmployees(
            Expression<Func<Employee, bool>> filter,
            Func<IQueryable<Employee>, IOrderedQueryable<Employee>> orderBy,
            int pageIndex, int pageSize, out int totalRecords, string includeProperties = "");
        public abstract bool CreateEmployee(Employee employee);
        public abstract bool UpdateEmployee(Employee employee);
        public abstract void DeleteEmployee(string EMPCode);


        public abstract EmployeeType GetEmployeeType(string EMPType);
        public abstract List<EmployeeType> GetAllEmployeeTypes();
        public abstract List<EmployeeType> FindEmployeeTypes(Expression<Func<EmployeeType, bool>> filter = null);
        public abstract EmployeeType CreateEmployeeType(EmployeeType employeeType, uint initialSeqNumber = 0);
        public abstract void UpdateEmployeeType(EmployeeType employeeType);
        public abstract void DeleteEmployeeType(string EMPType);
        public abstract List<EmployeeType> FindEmployeeTypes(
         Expression<Func<EmployeeType, bool>> filter,
         Func<IQueryable<EmployeeType>, IOrderedQueryable<EmployeeType>> orderBy,
         int pageIndex, int pageSize, out int totalRecords);


        public abstract Team GetTeam(string TEAMCode);
        public abstract List<Team> GetAllTeams();
        public abstract List<Team> FindTeams(Expression<Func<Team, bool>> filter = null);
        public abstract Team CreateTeam(Team team);
        public abstract void UpdateTeam(Team team);
        public abstract void DeleteTeam(string TEAMCode);
        public abstract List<Team> FindTeams(Expression<Func<Team, bool>> filter, Func<IQueryable<Team>, IOrderedQueryable<Team>> orderBy,
        int pageIndex, int pageSize, out int totalRecords);

        public abstract List<Team> FindTeams(IList<Expression<Func<Team, bool>>> filters, Func<IQueryable<Team>, IOrderedQueryable<Team>> orderBy, int pageIndex, int pageSize, out int totalRecords);
        */
    }
}
